#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

typedef int DLDataType;

typedef struct DListNode
{
	DLDataType* value;
	struct DListNode* next;
	struct DListNode* prev;
}DListNode;

DListNode* CreatDListNode(DLDataType x);
void DListInit(DListNode** pplist); 
void DListDestroy(DListNode** pplist);

void DListPushBack(DListNode** pplist, DLDataType x);
void DListPopBack(DListNode** pplist);
void DListPushFront(DListNode** pplist, DLDataType x);
void DListPopFront(DListNode** pplist);

void DListInsertAfter(DListNode* pos, DLDataType x);
void DListInsertBefore(DListNode* pos, DLDataType x);
void DListErase(DListNode* pos);

void DListPrint(DListNode* plist);
DListNode* DListFind(DListNode* plist, DLDataType x);
